package net.model;

import java.io.Serializable;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

@Entity
@Table(name = "CLASE_OBJETO")
public class ClaseObjeto implements Serializable {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6235003847944285280L;

	@Id
	@Column(name = "uid")
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	/**
	 * Objeto al que pertenece
	 * Agrugue , insertable=false, updatable=false
	 */
	@ManyToOne
	@JoinColumn(name = "ID_OBJETO", nullable = false , insertable=false, updatable=false)
	private Objeto objeto;

	/**
	 * Clase
	 */
	@ManyToOne
	@JoinColumn(name = "ID_CLASE", nullable = false)
	private Clase clase;

	@Column(name = "indice")
	private Integer indice;
	
	/**
	 * Mide la distancia del objeto a la clase
	 */
	@Column(name = "distancia_promedio")
	private Double distanciaPromedio;
	
	public ClaseObjeto() {
		super();
	}

	public ClaseObjeto(Clase clase) {
		this.clase = clase;
	}

	public Objeto getObject() {
		return objeto;
	}

	public void setObjeto(Objeto objeto) {
		this.objeto = objeto;
	}

	public Clase getClase() {
		return clase;
	}

	public void setClase(Clase clase) {
		this.clase = clase;
	}
	
	public Integer getIndice() {
		return indice;
	}

	public void setIndice(Integer indice) {
		this.indice = indice;
	}

	public boolean equals(Object o) {
		if (o == null)
			return false;
		if (!(o instanceof ClaseObjeto))
			return false;
		ClaseObjeto c = (ClaseObjeto) o;
		if (getClase() != null)
			return getClase().equals(c.getClase());
		return false;
	}

	public String toString() {
		if (getClase() != null)
			return getClase().getNombre();
		return "";
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Double getDistanciaPromedio() {
		return distanciaPromedio;
	}
	
	public void setDistanciaPromedio(Double distanciaPromedio) {
		this.distanciaPromedio = distanciaPromedio;
	}
	
	@Override
	public Object clone() {
		ClaseObjeto clase = new ClaseObjeto(this.getClase());
		return clase;
	}
}
